<script>
    //声明一条树形数据

    //数据中都会有id和parentId进行相互对应
    let tree = [
        {
            id: 1,
            name: '北京',
            parentId: 0
        },
        {
            id: 2,
            name: '江苏',
            parentId: 0,
            children: [
                {
                    id: 4,
                    name: '南京',
                    parentId: 2
                },
                {
                    id: 5,
                    name: "徐州",
                    parentId: 2
                },
                {
                    id: 6,
                    name: "扬州",
                    parentId: 2
                }
            ]
        },
        {
            id: 3,
            name: '安徽',
            parentId: 0,
            children: [
                {
                    id: 7,
                    parentId: 3,
                    name: "滁州",
                    children: [
                        {
                            id: 9,
                            parentId: 7,
                            name: '汊河'
                        }
                    ]
                },
                {
                    id: 8,
                    parentId: 3,
                    name: '合肥'
                }
            ]
        }
    ]

    // 声明一个函数,专门将树形转换成扁平数据

    // let arr = [[0, 1], [3, 4], [5, 6, [7, 8]]];

    //attr 子节点的字段
    function flatTree(data, attr = 'children') {
        //声明一个数组,存储扁平之后的数据
        let flatArr = [];
        //recursion 递归处理函数
        function recursion(arr) {
            //遍历数据
            arr.forEach(item => {
                //判断自己是否有子节点
                if (item[attr] && item[attr].length > 0) {
                    recursion(item[attr])
                    // console.log(item.children)
                }
                //过滤掉子节点属性名,避免变化之后,还有子节点
                let keys = Object.keys(item)
                keys = keys.filter(key => key !== attr)
                //重新声明一个对象,将item对应的公共属性添加到这个对象里面
                let obj = {};
                // ['name','id','parentId']
                keys.forEach(key => {
                    obj[key] = item[key]
                })

                flatArr.push(obj)
            })
        }
        recursion(data)
        return flatArr;
    }

    let res = flatTree(tree)

    console.log(res)
</script>